package portalEstadoEntrega;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;

import org.jboss.logging.Logger;

import portal.entidades.Resultado;
import portal.servicios.CompraService;
import portal.servicios.NotificacionAuditoriaService;
import portal.servicios.exceptions.CompraNoEncontradaException;
import portal.servicios.exceptions.EstadoCompraInvalidoException;
import portal.util.xml.XmlUtil;

@Stateless
@WebService
public class ServidorEstadoEntregaBean implements ServidorEstadoEntrega {

	@EJB
	private CompraService compraService;
	
	@EJB
	private NotificacionAuditoriaService notificarService;
	
	private static Logger logger = Logger.getLogger(ServidorEstadoEntregaBean.class);

	public ServidorEstadoEntregaBean() {

	}

	@Override
	@WebMethod
	public String notificarEntregaDespacho(int nroVenta) {
		// http://localhost:8080/tpoPortalEJB/ServidorEstadoEntregaBean
		logger.info("######## notificarEntregaDespacho START ########");
		logger.info("Ingresa Nro de Venta: " + nroVenta);
		Resultado resultado = new Resultado();
		try {
			compraService.marcarComoEntregada(nroVenta);
			resultado.setOkConMensaje("Se actualizo el estado a entregado");
		} catch (CompraNoEncontradaException e) {
			resultado.setErrorConMensaje("No se encontro ninguna venta para el numero solicitado");
		} catch (EstadoCompraInvalidoException e) {
			resultado.setErrorConMensaje("La venta no se encuentra en estado Pendiente de Entrega");
		} catch (Exception e) {
			e.printStackTrace();
			resultado.setErrorConMensaje("Surgio un error ejecutando el servicio");
		}
		
		try {
			logger.info("Envio notificacion a Monitoreo");
			notificarService.enviarInformeAuditoria(resultado.getMensaje());
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Error notificando a Monitoreo", e);
		}
		String resultadoXml = XmlUtil.resultado2Xml(resultado);
		logger.info("Devuelvo resultado: " + resultadoXml);
		logger.info("######## notificarEntregaDespacho END ########");
		
		return resultadoXml;
	}

}
